import time
from finalcountdown import FinalCountDown
from PyQt4 import QtCore, QtGui
# from kthread import Kthread

class Progressivo(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)
        
    def run(self):
        while True:
            time.sleep(1)
            self.emit(QtCore.SIGNAL("maisum()")) 
        
   
class Regressivo(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)
        
    def run(self):
        while True:
            time.sleep(1)
            self.emit(QtCore.SIGNAL("menosum()")) 
    
class Cronometro(QtCore.QObject):
    def __init__(self,hora,min,seg,prog,reg,play,pause,reset):
        QtCore.QObject.__init__(self)
        self.horas = hora
        self.minutos = min
        self.segundos = seg
        self.progressivo = prog
        self.regressivo = reg
        self.botaoplay = play
        self.botaopause = pause
        self.botaoreset = reset
        self.rodando = 0
        self.enablegeral()
        self.alarmeon = False
        QtCore.QObject.connect(self.horas, QtCore.SIGNAL("valueChanged(int)"), self.arrumarspins)
        QtCore.QObject.connect(self.minutos, QtCore.SIGNAL("valueChanged(int)"), self.arrumarspins)
        QtCore.QObject.connect(self.segundos, QtCore.SIGNAL("valueChanged(int)"), self.arrumarspins)
        QtCore.QObject.connect(self.botaoplay, QtCore.SIGNAL("clicked()"), self.funcaoplay)
        QtCore.QObject.connect(self.botaopause, QtCore.SIGNAL("clicked()"), self.funcaopause)
        QtCore.QObject.connect(self.botaoreset, QtCore.SIGNAL("clicked()"), self.funcaoreset)

    def funcaoplay(self):
        #print 'funcao play'
        self.disablegeral()
        try:
            del self.contador
        except:
            print 'nao tem ontador'
        if self.progressivo.isChecked():
            self.inicializaprogressivo()
            self.rodando = 1
        elif not self.terminou():
                self.contador = Regressivo()
                QtCore.QObject.connect(self.contador, QtCore.SIGNAL("menosum()"), self.menosum)
                self.rodando = 2
        else:
            self.rodando = 0
            self.enablegeral()
            return
        #print 'OH EU 1'
        self.contador.start()
    
    def inicializaprogressivo(self):
        self.contador = Progressivo()
        QtCore.QObject.connect(self.contador, QtCore.SIGNAL("maisum()"), self.maisum)
        
    def disablegeral(self):
        self.habilitarspins(False)
        self.habilitarplay(False)
        self.habilitarradios(False)
    
    def enablegeral(self):
        self.habilitarspins(True)
        self.habilitarplay(True)
        self.habilitarradios(True)
        
    def funcaopause(self):
        #print 'funcao pause'
        try:
            if self.alarmeon:
                self.paraalarme()
            self.rodando = 0
            self.contador.terminate()
            self.enablegeral()
        except Exception, e:
            print e
        
    def funcaoreset(self):
        #print 'funcao reset'
        self.horas.setValue(0)
        self.minutos.setValue(0)
        self.segundos.setValue(0)
    
    def maisum(self):
        self.segundos.setValue(self.segundos.value()+1)
    
    def menosum(self):
        if not self.terminou():
            self.segundos.setValue(self.segundos.value()-1)
    
    def terminou(self):
        if self.segundos.value() == 0 and self.minutos.value() == 0 and self.horas.value() == 0:
            if self.rodando == 2:
                self.funcaopause()
                self.alarme()
                self.rodando = 1
                self.disablegeral()
                self.inicializaprogressivo()
                self.contador.start()
            return True
        else:
            return False
    
    def alarme(self):
        self.alarmeon = True
        self.emit(QtCore.SIGNAL("pisca()"))
        self.musica = FinalCountDown()
        #self.musica.play()
        
    def paraalarme(self):
        self.alarmeon = False
        self.musica.terminate()
        del self.musica
        
    def arrumarspins(self): 
        #print 'arrumaspins'
        if self.minutos.value() >= 60:
            self.minutos.setValue(0)
            self.horas.setValue(self.horas.value()+1)
        if self.segundos.value() >= 60:
            self.segundos.setValue(0)
            self.minutos.setValue(self.minutos.value()+1)        
        if self.minutos.value() < 0:
            if self.horas.value() > 0:
                self.minutos.setValue(59)
                self.horas.setValue(self.horas.value()-1)
            else:
                self.minutos.setValue(0)
        if self.segundos.value() < 0:
            if self.minutos.value() > 0:
                self.segundos.setValue(59)
                self.minutos.setValue(self.minutos.value()-1)
            elif self.horas.value() > 0:
                self.minutos.setValue(60)
                self.horas.setValue(self.horas.value()-1)
            else:
                self.segundos.setValue(0)

    def habilitarplay(self,boleano):
        self.botaoplay.setEnabled(boleano)
        self.botaopause.setEnabled(not boleano)
        self.botaoreset.setEnabled(boleano)
      
    def habilitarspins(self,boleano):
        boleano = not boleano
        self.horas.setReadOnly(boleano)
        self.minutos.setReadOnly(boleano)
        self.segundos.setReadOnly(boleano)
        
    def habilitarradios(self,boleano):
        self.progressivo.setEnabled(boleano)
        self.regressivo.setEnabled(boleano)
        